Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit 99068ef587cfb17da8b03428ba103c93b75e66e4


Parents : 57df327
Author : Mark Qvist <bc7291552be7a58f361522990465165c>
Signature : T66BB85Valid, signed by author
Date : 2026-07-27T13:32:55+02:00

Fixed telemetry interfaces disappearing from map when disabling discovered interfaces. Fixed discovered/telemetry interfaces not using IFAC information for configuraion.

Changes

3 files changed, 8 insertions(+), 4 deletions(-)


Diff

diff --git a/sbapp/sideband/core.py b/sbapp/sideband/core.py
index 4f09f9b6..ad7a53c5 100644
--- a/sbapp/sideband/core.py
+++ b/sbapp/sideband/core.py
@@ -1408,7 +1408,8 @@ class SidebandCore():
"reachable_on": ife["reachable_on"], "port": ife["port"], "status": "available", "status_code": 1000,
"latitude": ife["lat"], "longitude": ife["lon"], "height": ife["height"], "if_appearance": if_appearance,
"frequency": ife["frequency"], "bandwidth": ife["bandwidth"], "channel": ife["channel"], "config_entry": None,
- "modulation": ife["modulation"], "cr": ife["codingrate"], "sf": ife["spreadingfactor"] }
+ "modulation": ife["modulation"], "cr": ife["codingrate"], "sf": ife["spreadingfactor"],
+ "ifac_netname": ife["ifac_netname"], "ifac_netkey": ife["ifac_netkey"] }
self.config_entry_from_iface(iface)
self.telemetry_interfaces[discovery_hash] = iface

diff --git a/sbapp/ui/map.py b/sbapp/ui/map.py
index 00db840f..effcd736 100644
--- a/sbapp/ui/map.py
+++ b/sbapp/ui/map.py
@@ -53,6 +53,7 @@ class Map():
self.clustered_layer = None
self.clustered_markers = {}
self.interface_discovery_hashes = {}
+ self.peer_interface_discovery_hashes = {}
self.connection_map_hashes = {}
self.connection_map_only_blocked = False
self.last_interfaces_update = 0
@@ -684,7 +685,7 @@ class Map():
if_appearance[1] = own_appearance[1]
if_appearance[2] = own_appearance[2]
iface = self.app.sideband.telemetry_iface_from_ife(ife, own_address, ifts=ifts, appearance=if_appearance)
- self.interface_discovery_hashes[discovery_hash] = iface
+ self.peer_interface_discovery_hashes[discovery_hash] = iface
if iface["latitude"] and iface["longitude"]:
if not discovery_hash in self.clustered_markers:
telemetry = {"location": {"latitude": iface["latitude"], "longitude": iface["longitude"], "last_update": time.time()}}
@@ -700,7 +701,7 @@ class Map():
try:
stale_markers = []
for marker in self.clustered_markers:
- if not marker in telemetry_entries and not marker in self.interface_discovery_hashes and not marker in self.connection_map_hashes:
+ if not marker in telemetry_entries and not marker in self.interface_discovery_hashes and not marker in self.peer_interface_discovery_hashes and not marker in self.connection_map_hashes:
if marker == own_address:
if not retain_own: stale_markers.append(marker)
else: stale_markers.append(marker)
@@ -784,7 +785,7 @@ class Map():
if_appearance[1] = appearance[1]
if_appearance[2] = appearance[2]
iface = self.app.sideband.telemetry_iface_from_ife(ife, telemetry_source, ifts=ifts, appearance=if_appearance)
- self.interface_discovery_hashes[discovery_hash] = iface
+ self.peer_interface_discovery_hashes[discovery_hash] = iface
if iface["latitude"] and iface["longitude"]:
if not discovery_hash in self.clustered_markers:
if_telemetry = {"location": {"latitude": iface["latitude"], "longitude": iface["longitude"], "last_update": time.time()}}

diff --git a/sbapp/ui/objectdetails.py b/sbapp/ui/objectdetails.py
index e3ccb377..71e7176d 100644
--- a/sbapp/ui/objectdetails.py
+++ b/sbapp/ui/objectdetails.py
@@ -490,6 +490,7 @@ class RVDetails(MDRecycleView):
tid_str = f", ID [b]<{if_data['transport_id']}>[/b]" if "transport_id" in if_data else ""
tcp_reachable = "reachable_on" in if_data and "port" in if_data
i2p_reachable = if_type == "I2PInterface" and "reachable_on" in if_data
+ ifac_enabled = "ifac_netname" in if_data or "ifac_netkey" in if_data
# if "discovery_hash" in if_data: self.entries.append({"icon": "key-link", "text": f"[b]{RNS.prettyhexrep(if_data['discovery_hash'])}[/b]"})
# if "transport_id" in if_data: self.entries.append({"icon": "key-link", "text": f"Transport ID [b]<{if_data['transport_id']}>[/b]"})
@@ -497,6 +498,7 @@ class RVDetails(MDRecycleView):
if "transport" in if_data: self.entries.append({"icon": "transit-connection-variant", "text": f"Transport [b]{'enabled' if if_data['transport'] else 'disabled'}[/b]{tid_str if if_data['transport'] else ''}", "on_release": pass_job})
if "network_id" in if_data: self.entries.append({"icon": "key-link", "text": f"Network ID [b]<{if_data['network_id']}>[/b]", "on_release": pass_job}) if if_data["network_id"] != if_data["transport_id"] else None
if "discovered" in if_data: self.entries.append({"icon": "clock-check-outline", "text": f"First heard [b]{RNS.prettytime(time.time()-if_data['discovered'], compact=True)}[/b] ago", "on_release": pass_job})
+ if ifac_enabled: self.entries.append({"icon": "arrow-horizontal-lock", "text": f"IFAC [b]enabled[/b]", "on_release": pass_job})
if tcp_reachable: self.entries.append({"icon": "connection", "text": f"Reachable on [b]{if_data['reachable_on']}:{if_data['port']}[/b]", "on_release": pass_job})
if i2p_reachable: self.entries.append({"icon": "connection", "text": f"I2P B32 [b]{if_data['reachable_on']}[/b]", "on_release": pass_job})
if "frequency" in if_data: self.entries.append({"icon": "sine-wave", "text": f"Frequency [b]{RNS.prettyfrequency(if_data['frequency'], d=3)}[/b]", "on_release": pass_job})


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────